// let p = new Promise((resolve,reject)=>{
//   setTimeout(resolve,1000,3);
// });
// p.then(res=>{
//   console.log(res);
// })
// function handle(e){
//   console.log('handle==>'+e);
// }
// p.then(handle)

// async function foo(){}
// let p = async function(){};
// let p1 = async ()=>{},
// class s{
//   async hello(){}
// }

// async function bar(){
//   console.log('1');
// };
// bar().then(res=>{
//   console.log(res);
// })
// console.log('2');

// async function bar(){
//   console.log(1);
//   return 3;
// }
// bar().then(res=>{
//   console.log(res);
// })
// console.log(2);

// async function foo(){
//   console.log('1');
//   return Promise.resolve('3');
// }
// foo().then(console.log);

// async function bar(){
//   return 'bar';
// }
// bar().then(console.log);

// async function foo(){
//   return ['foo'];
// }
// foo().then(console.log);

// async function baz(){
//   const thenable = {
//     then(callback){callback('thenable')}
//   }
//   return thenable;
// }
// baz().then(console.log);

// async function bzlProm(){
//   return Promise.resolve(4);
// }
// bzlProm().then(console.log);

// async function bar(){
//   console.log('1');
//   throw '3';
// }
// bar().catch(console.log);
// console.log('2');

// async function bar(){
//   console.log('1');
//   Promise.reject('3');
// }
// // bar().then(null,console.log);
// bar().catch(console.log);
// console.log('2');

// let p = new Promise((resolve,reject)=>{
//   setTimeout(resolve,3000,3);
// })
// p.then(res=>{
//   console.log(res);
// })
//  async function bar(){
//   let p = new Promise((resolve,reject)=>{
//     setTimeout(resolve,1000,'hello word')
//   })
//   console.log(await p);
// }
// bar();

// async function bar(){
//   console.log(await Promise.resolve('bar'));
// }
// bar();

// async function foo(){
//   return await Promise.resolve('foo')
// }
// foo().then(console.log);

// async function baz(){
//   console.log('baz-start');
//   let p = await new Promise((resolve,reject)=>{setTimeout(resolve,5000,'hello word')})
//   console.log(p);
//   console.log('baz-end');
// }
// baz();

// async function bar1(){
//   console.log(await 'bar1');
// }
// bar1();

// async function bar2(){
//   console.log(await ['bar2']);
// }
// bar2();

// async function bar3(){
//   const thanable = {
//     then:(callback)=>{
//       callback('bar3')
//     }
//   }
//   console.log(await thanable);
// }
// bar3();

// async function qux(){
//   console.log(await new Promise((resolve,reject)=>{
//     setTimeout(resolve,3000,'qux');
//   }));
// }
// qux();

// async function bar(){
//   console.log('1');
//   await (()=>{throw '3'})()
// }
// bar().catch(console.log);
// console.log('2');

// async function bar(){
//   console.log('1');
//   // console.log(await Promise.reject('bar'));
//   // console.log(await Promise.resolve('bar'));
//   await Promise.reject('3');
//   console.log('4');
// }
// bar().catch(console.log);
// console.log('2');

// async function bar(){
//   console.log(await Promise.resolve('bar'));
// }
// bar();

// ( async (res)=>{
//   console.log(await Promise.resolve(res));
// })('hello foo')

// function bar(){
//   const bzl = {
//     func: async ()=>{
//       console.log(await Promise.resolve('hello world'));
//     }
//   }
//   bzl.func();
// }
// bar();

// async function bar(){
//   console.log(await Promise.resolve('bar'));
// }
// async function foo(){
//   console.log(await 'foo');
// }
// async function qux(){
//   console.log('qux');
// }
// bar();
// foo();
// qux();

// async function foo() { 
//   console.log(await Promise.resolve('foo')); 
//  } 
//  async function bar() { 
//   console.log(await 'bar'); 
//  } 
//  async function baz() { 
//   console.log('baz'); 
//  } 
//  foo(); 
//  bar(); 
//  baz();

async function bar(){
  console.log('2');
  await null;
  console.log('4');
}
console.log('1');
bar();
console.log('3');